VeraCrypt - 为偏执狂提供强大安全保障的免费开源磁盘加密工具

文档 技术细节 VeraCrypt卷格式规范

# VeraCrypt卷格式规范

文件托管卷的格式与分区/设备托管卷的格式相同（不过，系统分区/驱动器的“卷头”或密钥数据存储在第一个逻辑驱动器磁道的最后512字节中）。VeraCrypt卷没有“签名”或ID字符串。在解密之前，它们看起来完全由随机数据组成。
每个VeraCrypt卷在创建时，其空闲空间会用随机数据填充。* 随机数据的生成方式如下：在VeraCrypt卷格式化开始之前，随机数生成器会生成一个临时加密密钥和一个临时辅助密钥（XTS模式）（请参阅 随机数生成器 部分）。使用临时密钥初始化用户选择的加密算法。然后，该加密算法用于加密由随机数生成器生成的随机字节组成的明文块。加密算法以XTS模式运行（请参阅 隐藏卷 部分）。生成的密文块用于填充（覆盖）卷上的空闲空间。临时密钥存储在RAM中，并在格式化完成后擦除。

VeraCrypt卷格式规范：

偏移量（字节） | 大小（字节） | 加密 状态† | 描述
--- | --- | --- | ---
0 | 64 | 未加密§ | 盐值
64 | 4 | 已加密 | ASCII字符串 "VERA"
68 | 2 | 已加密 | 卷头格式版本 (2)
70 | 2 | 已加密 | 打开该卷所需的最低程序版本
72 | 4 | 已加密 | 字节 256 - 511（解密后）的 CRC - 32 校验和
76 | 16 | 已加密 | 保留（必须全为零）
92 | 8 | 已加密 | 隐藏卷的大小（非隐藏卷中设置为零）
100 | 8 | 加密 | 卷大小
108 | 8 | 加密 | 主密钥范围起始位置的字节偏移量
116 | 8 | 加密 | 主密钥范围内加密区域的大小
124 | 4 |  |  |  |
72 | 4 | 已加密 | 字节 256 - 511（解密后）的 CRC - 32 校验和
76 | 16 | 已加密 | 保留（必须全为零）
92 | 8 | 已加密 | 隐藏卷的大小（非隐藏卷中设置为零）
252
4 | 已加密 | 字节 64 - 251（解密后）的 CRC - 32 校验和
256 | 可变 | 已加密 | 串联的主密钥和辅助主密钥**
512 | 65024 | 已加密 | 保留（对于系统加密，此项省略††）
65536 | 65536 | 已加密 / | 隐藏卷头区域（如果没有隐藏卷
|  | 未加密§ | 在卷内，此区域包含随机数据††）。对于
|  |  | 系统加密，此项省略。‡‡ 请参阅字节 0–65535。
131072 | 可变 | 加密 | 数据区域（主密钥范围）。对于系统加密，偏移量
|  |  | 可能不同（取决于系统分区的偏移量）。
S - 131072† | 65536 | 加密 / | 备份头（使用不同的盐派生的不同头密钥进行加密）。
|  | 未加密§ | 使用不同的盐派生的不同头密钥进行加密）。对于系统加密，此项省略。‡‡ 请参阅字节 0 - 65535。
S - 65536† | 65536 | 加密 / | 隐藏卷的备份头（使用不同的盐派生的不同头密钥进行加密）。
|  | 未加密§ | 使用不同的盐派生的不同头密钥进行加密）。如果没有隐藏卷，
|  |  | 如果卷内包含一个隐藏卷，此区域包含随机数据。††
|  |  | 对于系统加密，此项目省略。‡‡ 请参阅字节 0 - 65535。
|  |  | 0 - 65535。

位于字节 #0（盐值）和 #256（主密钥）的字段包含在卷创建过程中由随机数生成器生成的随机值（请参阅 随机数生成器 部分）。
如果 VeraCrypt 卷包含一个隐藏卷（在其空闲空间内），隐藏卷的头部位于宿主卷的字节 #65536 处（宿主/外部卷的头部位于宿主卷的字节 #0 处 - 请参阅 隐藏卷 部分）。如果 VeraCrypt 卷内没有隐藏卷，卷的字节 65536 - 131071（即隐藏卷头部可能存在的区域）包含随机数据（有关在卷创建时用随机数据填充空闲卷空间的方法的信息，请参阅上文）。隐藏卷头部的布局与标准卷的布局相同（字节 0 - 65535）。
VeraCrypt 卷的最大可能大小为 263 字节（8,589,934,592 GB）。然而，出于安全原因（考虑到 加密算法 使用的 128 位块大小），允许的最大卷大小为 1 PB（1,048,576 GB）。

#### 嵌入式备份头部

每个 VeraCrypt 卷都包含一个嵌入式备份头部，位于卷的末尾（请参阅上文）。头部备份 不是 卷头部的副本，因为它使用不同的盐值派生的不同头部密钥进行加密（请参阅 头部密钥派生、盐值和迭代次数 部分）。
当卷密码和/或 PIM 和/或密钥文件发生更改时，或者当从嵌入式（或外部）头部备份中恢复头部时，卷头部和备份头部（嵌入在卷中）都会使用不同的头部密钥重新加密（使用新生成的盐值派生 - 卷头部的盐值与备份头部的盐值不同）。每个盐值都由 VeraCrypt 随机数生成器生成（请参阅 随机数生成器 部分）。
有关卷头备份的更多信息，请参阅章节 主程序窗口 中的小节 工具 > 恢复卷头。
下一部分 >>

* 前提是禁用 快速格式化 和 动态 选项，并且该卷不包含已在原地加密的文件系统（请注意，VeraCrypt 不允许用户在此类卷中创建隐藏卷）。
† 卷头的加密区域使用主头密钥和次头密钥以 XTS 模式进行加密。有关更多信息，请参阅章节 加密方案 以及章节 头密钥推导、盐值和迭代次数。
‡ S 表示卷主机的大小（以字节为单位）。
§ 请注意，盐值不需要加密，因为它不需要保密 [7]（盐值是一串随机值）。
** 当使用密码级联对卷进行加密时，这里会存储多个串联的主密钥（次主密钥用于 XTS 模式）。
†† 有关在创建卷时用随机数据填充卷空闲空间的方法的信息，请参阅本节前面的内容。
‡‡ 这里，“系统加密”的含义不包括包含隐藏操作系统的隐藏卷。